import axios from "axios";
import { useUserStore } from "@/stores/modules/user";

const service = axios.create({
  // axios中请求配置有baseURL选项，表示请求URL公共部分
  baseURL: import.meta.env.VITE_APP_BASE_API,
  // 超时
  timeout: 5 * 60 * 1000,
});

// 添加请求拦截器
service.interceptors.request.use(
  config => {
    // 在发送请求之前做些什么
    const token = useUserStore().getToken;
    config.headers["token"] = token;
    return config;
  },
  error => {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

// 添加响应拦截器
service.interceptors.response.use(
  response => {
    /* 对响应成功做点什么 可使用async await 做异步操作*/
    const data = response.data;

    if (data.code !== 200) {
      // not 200 for 请求错误
      ElMessage.error(data.message || "未知错误~");
      return Promise.reject(data);
    }
    return data ?? {};
  },
  error => {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    const data = error.response.data;
    if (data.code === 401) {
      // 401 登录过期
      // token过期 粗糙的
      location.href = "/login";
      ElMessage.error("登录已过期,请重新登录~");
      return Promise.reject(data);
    }
    ElMessage.error(data.message || "未知错误~");
    return Promise.reject(error);
  }
);

export default service;
